package cn.com.css.taxInspection.gt3.service.impl;

import cn.com.css.taxInspection.common.constants.Constants;
import cn.com.css.taxInspection.gt3.entity.JcAjtzztbEntity;
import cn.com.css.taxInspection.gt3.mapper.JcAJjtzztbMapper;
import cn.com.css.taxInspection.gt3.service.DmGySwryService;
import cn.com.css.taxInspection.gt3.service.JcAjtzztbService;
import cn.com.css.taxInspection.system.service.impl.HttpSessionService;
import cn.com.css.taxInspection.util.TsBqUtils;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.List;

@Service
public class JcAjtzztbServiceImpl extends ServiceImpl<JcAJjtzztbMapper, JcAjtzztbEntity> implements JcAjtzztbService {

    @Resource
    private HttpSessionService httpSessionService;
    @Resource
    private JcAjtzztbService jcAjtzztbService;
    @Resource
    private DmGySwryService dmGySwryService;

    @SuppressWarnings({"unchecked", "rawtypes"})
    @Override
    public IPage<JcAjtzztbEntity> pageInfo(JcAjtzztbEntity jcAjtzztbEntity) throws ParseException {
        Page page = new Page(jcAjtzztbEntity.getPage(), jcAjtzztbEntity.getLimit());
        LambdaQueryWrapper<JcAjtzztbEntity> queryWrapper = Wrappers.lambdaQuery();
        String deptIdPrefix = httpSessionService.getCurrentDeptId().substring(0, 9); // 默认前缀（9位）
        if (TsBqUtils.isNotNull(jcAjtzztbEntity.getLx()) && jcAjtzztbEntity.getLx().equals(Constants.AJZT_LX_BCAJGL)) {
            deptIdPrefix = httpSessionService.getCurrentDeptId().substring(0, 8); // 如果是 BCAJGL 则取前8位
        }
        queryWrapper.like(JcAjtzztbEntity::getJsksDm, deptIdPrefix);
        //检查案件类型
        if (TsBqUtils.isNotNull(jcAjtzztbEntity.getLx())) {
            queryWrapper.eq(JcAjtzztbEntity::getLx, jcAjtzztbEntity.getLx());
        }
        //检查人类型
        if (TsBqUtils.isNotNull(jcAjtzztbEntity.getJcrlx())) {
            queryWrapper.eq(JcAjtzztbEntity::getJcrlx, jcAjtzztbEntity.getJcrlx());
        }
        //检查案件编号
        if (TsBqUtils.isNotNull(jcAjtzztbEntity.getJcajbh())) {
            queryWrapper.like(JcAjtzztbEntity::getJcajbh, jcAjtzztbEntity.getJcajbh());
        }
        //纳税人名称
        if (TsBqUtils.isNotNull(jcAjtzztbEntity.getNsrmc())) {
            queryWrapper.like(JcAjtzztbEntity::getNsrmc, jcAjtzztbEntity.getNsrmc());
        }
        //纳税人识别号
        if (TsBqUtils.isNotNull(jcAjtzztbEntity.getNsrsbh())) {
            queryWrapper.like(JcAjtzztbEntity::getNsrsbh, jcAjtzztbEntity.getNsrsbh());
        }
        //金三科室
        if (TsBqUtils.isNotNull(jcAjtzztbEntity.getJsks())) {
            queryWrapper.like(JcAjtzztbEntity::getJsks, jcAjtzztbEntity.getJsks());
        }
        //更改后科室
        if (TsBqUtils.isNotNull(jcAjtzztbEntity.getTzhks())) {
            queryWrapper.like(JcAjtzztbEntity::getTzhks, jcAjtzztbEntity.getTzhks());
        }
        //实际主查
        if (TsBqUtils.isNotNull(jcAjtzztbEntity.getSjzc())) {
            queryWrapper.like(JcAjtzztbEntity::getSjzc, jcAjtzztbEntity.getSjzc());
        }
        //实际协查
        if (TsBqUtils.isNotNull(jcAjtzztbEntity.getSjxc())) {
            queryWrapper.like(JcAjtzztbEntity::getSjzc, jcAjtzztbEntity.getSjxc());
        }
        //案件状态
        if (TsBqUtils.isNotNull(jcAjtzztbEntity.getAjztmc())) {
            queryWrapper.eq(JcAjtzztbEntity::getAjztmc, jcAjtzztbEntity.getAjztmc());
        } else {
            if (TsBqUtils.isNotNull(jcAjtzztbEntity.getZxrlx())) {
                // 将符合条件的状态常量提取到集合中，避免多次调用 or()
                List<String> validStatuses = Arrays.asList(
                        Constants.AJZT_ZXR_ZZX,
                        Constants.AJZT_ZXR_ZZZX,
                        Constants.AJZT_ZXR_ZJZX,
                        Constants.AJZT_ZXR_ZXWB
                );
                if (jcAjtzztbEntity.getZxrlx().equals(Constants.AJZT_LX_WTZ) || jcAjtzztbEntity.getZxrlx().equals(Constants.AJZT_LX_YTZ)) {
                    queryWrapper.in(JcAjtzztbEntity::getAjztmc, validStatuses);
                }
            }
        }
        //立案日期
        if (TsBqUtils.isNotNull(jcAjtzztbEntity.getLasjq())) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            queryWrapper.between(JcAjtzztbEntity::getLarq, sdf.parse(jcAjtzztbEntity.getLasjq()), sdf.parse(jcAjtzztbEntity.getLasjz()));
        }
        queryWrapper.orderByDesc(JcAjtzztbEntity::getJcajbh);
//        queryWrapper.orderByAsc(JcAjtzztbEntity::getLarq);
        IPage<JcAjtzztbEntity> resultPage = this.page(page, queryWrapper);
        //如果检查人类型不是空，则说明是自查检察人员页面进来的，则需要设置
        if (TsBqUtils.isNotNull(jcAjtzztbEntity.getJcrlx()) || TsBqUtils.isNotNull(jcAjtzztbEntity.getZxrlx())) {
            setSwryxm(resultPage.getRecords());
        }
        //设置实际科室
        return resultPage;
    }

    //给实际协查人设置税务人员姓名
    public void setSwryxm(List<JcAjtzztbEntity> jcAjtzztbEntityList) {
        for (JcAjtzztbEntity ajtzztbEntity : jcAjtzztbEntityList) {
            // 获取当前实体的jsxc字段并用逗号分割
            if (TsBqUtils.isNotNull(ajtzztbEntity.getJsxc())) {
                String[] jsxcList = ajtzztbEntity.getJsxc().split(",");
                // 用StringBuilder拼接结果
                StringBuilder combinedResult = new StringBuilder();
                for (int j = 0; j < jsxcList.length; j++) {
                    // 获取当前代码
                    String code = jsxcList[j];
                    // 查询对应名称
                    if (code.length() > 11) {
                        return;
                    }
                    String name = dmGySwryService.getSwry(code).getSwryxm();
                    // 拼接格式为 "代码|名称"
                    combinedResult.append(code).append("|").append(name);
                    // 如果不是最后一个元素，加上逗号分隔
                    if (j < jsxcList.length - 1) {
                        combinedResult.append(",");
                    }
                }
                // 将拼接后的字符串赋值回实体对象
                ajtzztbEntity.setJsxc(combinedResult.toString());
            }
        }
    }

    @Override
    public List<JcAjtzztbEntity> queryJcajtzztbEntityList(JcAjtzztbEntity jcAjtzztbEntity) throws ParseException {
        LambdaQueryWrapper<JcAjtzztbEntity> queryWrapper = Wrappers.lambdaQuery();
        String deptIdPrefix = httpSessionService.getCurrentDeptId().substring(0, 9); // 默认前缀（9位）
        queryWrapper.like(JcAjtzztbEntity::getJsksDm, deptIdPrefix);
        //检查案件类型 0 未调整  1 调整
        if (TsBqUtils.isNotNull(jcAjtzztbEntity.getLx())) {
            queryWrapper.eq(JcAjtzztbEntity::getLx, jcAjtzztbEntity.getLx());
        }
        //检查人类型 0 未调整  1 调整
        if (TsBqUtils.isNotNull(jcAjtzztbEntity.getJcrlx())) {
            queryWrapper.eq(JcAjtzztbEntity::getJcrlx, jcAjtzztbEntity.getJcrlx());
        }
        //检查案件编号
        if (TsBqUtils.isNotNull(jcAjtzztbEntity.getJcajbh())) {
            queryWrapper.like(JcAjtzztbEntity::getJcajbh, jcAjtzztbEntity.getJcajbh());
        }
        //纳税人名称
        if (TsBqUtils.isNotNull(jcAjtzztbEntity.getNsrmc())) {
            queryWrapper.like(JcAjtzztbEntity::getNsrmc, jcAjtzztbEntity.getNsrmc());
        }
        //纳税人识别号
        if (TsBqUtils.isNotNull(jcAjtzztbEntity.getNsrsbh())) {
            queryWrapper.like(JcAjtzztbEntity::getNsrsbh, jcAjtzztbEntity.getNsrsbh());
        }
        //金三科室
        if (TsBqUtils.isNotNull(jcAjtzztbEntity.getJsks())) {
            queryWrapper.like(JcAjtzztbEntity::getJsks, jcAjtzztbEntity.getJsks());
        }
        //更改后科室
        if (TsBqUtils.isNotNull(jcAjtzztbEntity.getTzhks())) {
            queryWrapper.like(JcAjtzztbEntity::getTzhks, jcAjtzztbEntity.getTzhks());
        }
        //案件状态
        if (TsBqUtils.isNotNull(jcAjtzztbEntity.getAjztmc())) {
            queryWrapper.eq(JcAjtzztbEntity::getAjztmc, jcAjtzztbEntity.getAjztmc());
        }
        //立案日期
        if (TsBqUtils.isNotNull(jcAjtzztbEntity.getLasjq())) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            queryWrapper.between(JcAjtzztbEntity::getLarq, sdf.parse(jcAjtzztbEntity.getLasjq()), sdf.parse(jcAjtzztbEntity.getLasjz()));
            queryWrapper.orderByAsc(JcAjtzztbEntity::getLarq);
        }
        List<JcAjtzztbEntity> jcAjtzztbEntityList = jcAjtzztbService.list(queryWrapper);
        // 设置税务人员姓名
        setSwryxm(jcAjtzztbEntityList);
        return jcAjtzztbEntityList;
    }
}
